package net.ifilm.dao;

import java.util.List;
import java.util.Map;

import net.ifilm.entity.*;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;

/**
 * 电影表<tt>film</tt>数据库操作类。
 * 
 * @author wangjunneil@gmail.com
 */
@Repository
public class FilmDao extends BaseDao {

    /**
     * 搜索时讲用户输入的关键字入库
     *
     * @param keyword 关键字
     */
    public void addHotKeyword(HotKeyword keyword) {
        super.insert("insertHotKey", keyword);
    }

    /**
     * 更新关键字搜索次数
     *
     * @param hotKeyword
     */
    public void updateHotKeyword(HotKeyword hotKeyword) {
        super.update("updateHotKeyword", hotKeyword);
    }

    /**
     * 按条件查询热门关键字列表
     *
     * @param parameter
     * @return
     */
    public List<HotKeyword> queryHotKeywordList(Map<String, Object> parameter) {
        List<HotKeyword> hotKeywordList = super.queryForList("queryHotKeyword", parameter);
        return hotKeywordList;
    }

    /**
     * 按条件查询关键字
     *
     * @param hotKeyword
     */
    public HotKeyword queryHotKeyword(HotKeyword hotKeyword) {
        return (HotKeyword) super.queryForObject("queryHotKeyword", hotKeyword);
    }





    /**
     * 根据参数名称查询电影列表
     *
     * <p>根据不同参数名称和类型执行不同的SQL，执行体SQL取决于给出的参数名称，参看Film.xml中执行体queryFilmList片段
     *
     * <ul>
     *     <li></li>
     * </ul>
     *
     * @param parameter Map参数列表
     * @return 电影对象列表
     */
    public List<Film> queryFilmList(Map<String, Object> parameter) {
        return super.queryForList("queryFilmList", parameter);
    }







    /**
     * 根据点击次数查询电影表前10条数据
     * 
     * @return 点击前10条电影数据
     */
    public List<Film> queryListByPlayNum() {
        return getSqlMapClientTemplate().queryForList("queryFilmListByPlayNum");
    }
    
    /**
     * 根据评分查询电影表前10条数据
     * 
     * @return 评分10条电影数据
     */
    public List<Film> queryListByScore() {
        return getSqlMapClientTemplate().queryForList("queryFilmListByScore");
    }
    
    /**
     * 根据高清查询电影表8条数据
     * 
     * @return 8条高清电影数据
     */
    public List<Film> queryListByClear() {
        return getSqlMapClientTemplate().queryForList("queryFilmListByClear");
    }
    
    /**
     * 查询门限级电影4条数据
     * 
     * @return 4条门限级电影数据
     */
    public List<Film> queryListBylimit() {
        return getSqlMapClientTemplate().queryForList("queryListListBylimit");
    }

    public List<Film> queryFilmlistByType(int filmType) {
        return getSqlMapClientTemplate().queryForList("queryFilmListByType", filmType);
    }
    

    public List<Film> queryFilmListToday() {
        return getSqlMapClientTemplate().queryForList("queryFilmListToday");
    }

    public void updateFilm(Film film) {
        getSqlMapClientTemplate().update("updateFilm", film);
    }

    public List<Film> roundQueryFilm(Map<String, Object> parameter) {
        return super.queryForList("roundFilm", parameter);
    }




    public Film queryFilmById(int filmid) {
        return (Film)getSqlMapClientTemplate().queryForObject("queryFilmById", filmid);
    }

    /**
     * 向数据库添加一条电影记录并返回生成的主键ID
     *
     * @param film 电影对象
     * @return  主键ID
     */
    public int insertFilm(Film film) {
        return (Integer)getSqlMapClientTemplate().insert("insertFilm", film);
    }

    /**
     * 根据电影ID删除电影纪录
     *
     * @param filmId
     */
    public void deleteFilm(int filmId) {
        getSqlMapClientTemplate().delete("delFilmById", filmId);
    }

    /**
     * 分页查询电影表纪录
     *
     * @param pageCount
     * @return
     */
    public List<Film> querySplitFilm(PageCount pageCount) {
        return getSqlMapClientTemplate().queryForList("querySplitFilm", pageCount);
    }

    /**
     * 查询电影表总记录数
     *
     * @return
     */
    public int queryFilmCount(Map<String, Object> parameter) {
        return (Integer)getSqlMapClientTemplate().queryForObject("queryFilmCount", parameter);
    }

    /**
     * 通过电影名称进行模糊查询
     *
     * @return 查询结果的条目数
     */
    public List<Film> queryFilm(Map<String, Object> parameter) {
        return getSqlMapClientTemplate().queryForList("queryFilm", parameter);
    }

    /**
     * 查询所有电影类型列表
     *
     * @return 电影类型列表
     */
    public List<FilmType> queryFilmTypeList() { //TODO 查询电影类型使用动态的Ibatis
        return getSqlMapClientTemplate().queryForList("queryFilmTypeList");
    }

    /**
     * 查询所有电影发行区列表
     *
     * @return 电影发行区列表
     */
    public List<Region> queryRegionList() { //TODO 查询电影发行区使用动态的Ibatis
        return getSqlMapClientTemplate().queryForList("queryRegionList");
    }

    /**
     * 根据明星名称查询记录
     *
     * @return 明星对象
     */
    public List<Star> queryStar(Map<String, String> parameter) {
        return getSqlMapClientTemplate().queryForList("queryStar", parameter);
    }

    /**
     * 改变电影状态，activeFlag、isLimit、isHot、isClear
     *
     * @param parameter
     */
    public void updateFilmStatus(Map<String, Object> parameter) {
        getSqlMapClientTemplate().update("updFilmStatus", parameter);
    }


    /**
     * 按播放次数查询首页排行数据
     *
     * <li>电影排行 - type=1</li>
     * <li>动漫排行 - type=4</li>
     * <li>电视剧排行 - type=2</li>
     * <li>综艺排行 - type=3</li>
     *
     * @param parameter
     * @return
     */
    public List<Film> queryFilmOrderPlayNum(Map<String, Object> parameter) {
        return super.queryForList("queryFilm", parameter);
    }
    
} // /:~
